From 628a12021319b17679c16063f6edfb9114dc5b26 Mon Sep 17 00:00:00 2001 From: robertl Date: Sat, 19 Jun 2010 23:59:06 +0000 Subject: [PATCH] Add dialog for mismatched GPSBabel versions, nagware dialog, Mac UI fixes. --- gui/app.pro | 12 ++- gui/babeldata.h | 19 ++++- gui/donate.cpp | 37 +++++++++ gui/donate.h | 46 +++++++++++ gui/donate.ui | 134 +++++++++++++++++++++++++++++++ gui/gpsbabelfe_es.qm | Bin 54043 -> 66856 bytes gui/gpsbabelfe_it.qm | Bin 1482 -> 69793 bytes gui/mainwindow.cpp | 23 +++++- gui/preferences.cpp | 2 + gui/preferences.ui | 28 +++---- gui/upgrade.cpp | 10 ++- gui/version_mismatch.cpp | 34 ++++++++ gui/version_mismatch.h | 39 +++++++++ gui/version_mismatch.ui | 168 +++++++++++++++++++++++++++++++++++++++ 14 files changed, 525 insertions(+), 27 deletions(-) create mode 100644 gui/donate.cpp create mode 100644 gui/donate.h create mode 100644 gui/donate.ui create mode 100644 gui/version_mismatch.cpp create mode 100644 gui/version_mismatch.h create mode 100644 gui/version_mismatch.ui diff --git a/gui/app.pro b/gui/app.pro index 88e1b3bce..ed8acb15b 100755 --- a/gui/app.pro +++ b/gui/app.pro @@ -1,4 +1,4 @@ -# $Id: app.pro,v 1.17 2010/06/03 15:01:24 robertl Exp $ +# $Id: app.pro,v 1.18 2010/06/19 23:59:06 robertl Exp $ # CONFIG += qt release @@ -11,7 +11,7 @@ ICON = images/appicon.icns QT += network \ xml \ - webkit + webkit \ unix:DESTDIR = objects unix:MOC_DIR = objects @@ -25,12 +25,13 @@ UI_DIR = tmp RESOURCES = app.qrc RC_FILE = app.rc -mac:TARGET=GPSBabelFE win32:TARGET=GPSBabelFE unix:TARGET=gpsbabelfe-bin +mac:TARGET=GPSBabelFE FORMS += aboutui.ui FORMS += advui.ui +FORMS += donate.ui FORMS += filterui.ui FORMS += gmapui.ui FORMS += mainwinui.ui @@ -39,10 +40,12 @@ FORMS += preferences.ui FORMS += rttrkui.ui FORMS += trackui.ui FORMS += upgrade.ui +FORMS += version_mismatch.ui FORMS += wayptsui.ui SOURCES += aboutdlg.cpp SOURCES += advdlg.cpp +SOURCES += donate.cpp SOURCES += dpencode.cpp SOURCES += filterdata.cpp SOURCES += filterdlg.cpp @@ -60,6 +63,7 @@ SOURCES += optionsdlg.cpp SOURCES += preferences.cpp SOURCES += processwait.cpp SOURCES += upgrade.cpp +SOURCES += version_mismatch.cpp macx:SOURCES += serial_mac.cpp unix:SOURCES += serial_unix.cpp windows:SOURCES += serial_win.cpp @@ -68,6 +72,7 @@ HEADERS += aboutdlg.h HEADERS += advdlg.h HEADERS += appname.h HEADERS += babeldata.h +HEADERS += donate.h HEADERS += filterdata.h HEADERS += filterdlg.h HEADERS += filterwidgets.h @@ -83,6 +88,7 @@ HEADERS += preferences.h HEADERS += processwait.h HEADERS += setting.h HEADERS += upgrade.h +HEADERS += version_mismatch.h TRANSLATIONS += gpsbabelfe_ru.ts TRANSLATIONS += gpsbabelfe_de.ts diff --git a/gui/babeldata.h b/gui/babeldata.h index c0b44cec1..c120b487e 100644 --- a/gui/babeldata.h +++ b/gui/babeldata.h @@ -1,5 +1,5 @@ // -*- C++ -*- -// $Id: babeldata.h,v 1.7 2010/04/12 02:53:04 robertl Exp $ +// $Id: babeldata.h,v 1.8 2010/06/19 23:59:06 robertl Exp $ //------------------------------------------------------------------------ // // Copyright (C) 2009 S. Khai Mong . @@ -58,12 +58,17 @@ public: upgradeCheckTime(QDateTime(QDate(2001, 1, 1), QTime(0, 0))), installationUuid(QUuid::createUuid().toString()), upgradeCallbacks(0), + upgradeAccept(0), upgradeDeclines(0), upgradeErrors(0), upgradeOffers(0), + runCount(0), startupVersionCheck(true), reportStatistics(true), - allowBetaUpgrades(false) + allowBetaUpgrades(false), + ignoreVersionMismatch(false), + disableDonateDialog(false), + donateSplashed(QDateTime(QDate(2010, 1, 1), QTime(0, 0, 0))) { }; @@ -105,16 +110,21 @@ public: sg.addVarSetting(new BoolSetting("app.previewGmap", previewGmap)); sg.addVarSetting(new IntSetting("app.upgradeCheckMethod", upgradeCheckMethod)); sg.addVarSetting(new DateTimeSetting("app.upgradeCheckTime", upgradeCheckTime)); + sg.addVarSetting(new DateTimeSetting("app.donateSplashed", donateSplashed)); sg.addVarSetting(new StringSetting("app.installationUuid", installationUuid)); sg.addVarSetting(new IntSetting("app.upgradeCallbacks", upgradeCallbacks)); + sg.addVarSetting(new IntSetting("app.upgradeAccept", upgradeAccept)); sg.addVarSetting(new IntSetting("app.upgradeDeclines", upgradeDeclines)); sg.addVarSetting(new IntSetting("app.upgradeErrors", upgradeErrors)); sg.addVarSetting(new IntSetting("app.upgradeOffers", upgradeOffers)); + sg.addVarSetting(new IntSetting("app.runCount", runCount)); // Global preferences. sg.addVarSetting(new BoolSetting("app.startupVersionCheck", startupVersionCheck)); sg.addVarSetting(new BoolSetting("app.reportStatistics", reportStatistics)); sg.addVarSetting(new BoolSetting("app.allowBetaUpgrades", allowBetaUpgrades)); + sg.addVarSetting(new BoolSetting("app.ignoreVersionMismatch", ignoreVersionMismatch)); + sg.addVarSetting(new BoolSetting("app.disableDonateDialog", disableDonateDialog)); } @@ -152,14 +162,19 @@ public: QDateTime upgradeCheckTime; QString installationUuid; int upgradeCallbacks; + int upgradeAccept; int upgradeDeclines; int upgradeErrors; int upgradeOffers; + int runCount; // Global preferences. bool startupVersionCheck; bool reportStatistics; bool allowBetaUpgrades; + bool ignoreVersionMismatch; + bool disableDonateDialog; + QDateTime donateSplashed; }; diff --git a/gui/donate.cpp b/gui/donate.cpp new file mode 100644 index 000000000..970c8bfab --- /dev/null +++ b/gui/donate.cpp @@ -0,0 +1,37 @@ +// -*- C++ -*- +//------------------------------------------------------------------------ +// +// Copyright (C) 2010 Robert Lipe +#include + +// A completely simple QDialog, in a class of its own for layout. +Donate::Donate(QWidget *parent) : QDialog(parent) +{ + ui.setupUi(this); + connect(ui.contributeButton, SIGNAL(clicked()), this, SLOT(contributeClicked())); +} + +void Donate::contributeClicked() +{ + QDesktopServices::openUrl(QUrl("http://www.gpsbabel.org/contribute.html")); + close(); +} diff --git a/gui/donate.h b/gui/donate.h new file mode 100644 index 000000000..0b6ae2bb5 --- /dev/null +++ b/gui/donate.h @@ -0,0 +1,46 @@ +// -*- C++ -*- +//------------------------------------------------------------------------ +// +// Copyright (C) 2010 Robert Lipe +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 +// USA +// + +#ifndef DONATE_H +#define DONATE_H + +#include "ui_donate.h" + +class Donate: public QDialog { + Q_OBJECT + + public: + Donate(QWidget *parent); + void showNever(bool f) { + ui.neverAgain->setVisible(f); + ui.textLine2->setVisible(f); + } + bool neverAgain() { return ui.neverAgain->isChecked(); } + + private: + Ui_Donate ui; + + private slots: + void contributeClicked(); + +}; + +#endif diff --git a/gui/donate.ui b/gui/donate.ui new file mode 100644 index 000000000..2fae6ead2 --- /dev/null +++ b/gui/donate.ui @@ -0,0 +1,134 @@ + + + Donate + + + + 0 + 0 + 351 + 300 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 400 + 300 + + + + Support GPSBabel + + + + + 10 + 13 + 312 + 249 + + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">GPSBabel is free software built and supported by volunteers. It consumes vast amounts of time to create and support the software as well as money for mapping programs, GPS receivers, and development fixtures. Please see how you can <a href="http://www.gpsbabel.org"><span style=" text-decoration: underline; color:#0000ff;">contribute time or via PayPal (no account needed) or Google Checkout.</span></a></p></body></html> + + + true + + + + + + + <p>Of course, if you've already contributed to the project or you just can't help the project, please check the box below to never see this message again.</p> + + + true + + + + + + + Never show this message again. + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + No, Thanks + + + + + + + Contribute + + + false + + + true + + + + + + + + + + + + dismissButton + clicked() + Donate + close() + + + 139 + 247 + + + 198 + 141 + + + + + diff --git a/gui/gpsbabelfe_es.qm b/gui/gpsbabelfe_es.qm index 265473a05c50cf073e36f00f3607bac2a84681e5..8bc858104ea946b8a2b88b438736fa710ab92509 100644 GIT binary patch delta 7702 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 QkpSluVCIe`J&~3Bf1Dcd2LJ#7 delta 2154 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. @@ -28,10 +28,12 @@ #include #include "mainwindow.h" +#include "../gbversion.h" #include "aboutdlg.h" #include "advdlg.h" #include "appname.h" #include "babeldata.h" +#include "donate.h" #include "filterdlg.h" #include "formatload.h" #include "gmapdlg.h" @@ -39,8 +41,8 @@ #include "optionsdlg.h" #include "preferences.h" #include "processwait.h" +#include "version_mismatch.h" #include "upgrade.h" -#include "../gbversion.h" const int BabelData::noType = -1; const int BabelData::fileType = 0; @@ -195,6 +197,13 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) upgrade->checkForUpgrade(babelVersion, bd.upgradeCheckTime, allowBetaUpgrades()); } + + if (!bd.ignoreVersionMismatch && babelVersion != VERSION) { + VersionMismatch vm(0, babelVersion, QString(appName) + QString(" " VERSION)); + + vm.exec(); + bd.ignoreVersionMismatch = vm.neverAgain(); + } } //------------------------------------------------------------------------ @@ -915,6 +924,16 @@ void MainWindow::closeActionX() if (wt.isValid()) { bd.upgradeCheckTime = wt; } + bd.runCount++; + + QDateTime now = QDateTime::currentDateTime(); + if((bd.runCount > 5) && (bd.donateSplashed.daysTo(now) > 30)) { + Donate donate(0); + if (bd.donateSplashed.date() == QDate(2010,1,1)) + donate.showNever(false); + donate.exec(); + bd.donateSplashed = now; + } saveSettings(); delete upgrade; upgrade = 0; diff --git a/gui/preferences.cpp b/gui/preferences.cpp index 3d01dfd3c..5366420e9 100644 --- a/gui/preferences.cpp +++ b/gui/preferences.cpp @@ -40,6 +40,7 @@ Preferences::Preferences(QWidget* parent, QList& formatList, ui_.startupCheck->setChecked(bd_.startupVersionCheck); ui_.reportStatisticsCheck->setChecked(bd_.reportStatistics); + ui_.ignoreVersionMismatchCheck->setChecked(bd_.ignoreVersionMismatch); connect (ui_.buttonBox, SIGNAL(accepted()), this, SLOT(acceptClicked())); connect (ui_.buttonBox, SIGNAL(rejected()), this, SLOT(rejectClicked())); @@ -79,6 +80,7 @@ void Preferences::acceptClicked() bd_.startupVersionCheck = ui_.startupCheck->isChecked(); bd_.reportStatistics = ui_.reportStatisticsCheck->isChecked(); + bd_.ignoreVersionMismatch = ui_.ignoreVersionMismatchCheck->isChecked(); accept(); } diff --git a/gui/preferences.ui b/gui/preferences.ui index 9b24efa1a..d66a009c7 100644 --- a/gui/preferences.ui +++ b/gui/preferences.ui @@ -6,8 +6,8 @@ 0 0 - 504 - 328 + 454 + 327 @@ -34,8 +34,8 @@ 23 18 - 234 - 43 + 387 + 62 @@ -53,6 +53,13 @@ + + + + Ignore mismatch between command line and GUI version. + + + @@ -103,19 +110,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - diff --git a/gui/upgrade.cpp b/gui/upgrade.cpp index 415fd7bcd..d39fe9620 100644 --- a/gui/upgrade.cpp +++ b/gui/upgrade.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -// $Id: upgrade.cpp,v 1.25 2010/04/12 02:53:04 robertl Exp $ +// $Id: upgrade.cpp,v 1.26 2010/06/19 23:59:06 robertl Exp $ /* Copyright (C) 2009, 2010 Robert Lipe, robertlipe@gpsbabel.org @@ -164,8 +164,10 @@ UpgradeCheck::updateStatus UpgradeCheck::checkForUpgrade( args += "&last_checkin=" + lastCheckTime.toString(Qt::ISODate); args += QString("&ugcb=%1").arg(bd_.upgradeCallbacks); args += QString("&ugdec=%1").arg(bd_.upgradeDeclines); + args += QString("&ugacc=%1").arg(bd_.upgradeAccept); args += QString("&ugoff=%1").arg(bd_.upgradeOffers); args += QString("&ugerr=%1").arg(bd_.upgradeErrors); + args += QString("&rc=%1").arg(bd_.runCount); int j = 0; @@ -212,7 +214,6 @@ void UpgradeCheck::readResponseHeader(const QHttpResponseHeader &responseHeader) void UpgradeCheck::httpRequestFinished(int requestId, bool error) { - bd_.upgradeCallbacks++; if (http == 0 || error) { bd_.upgradeErrors++; @@ -225,6 +226,7 @@ void UpgradeCheck::httpRequestFinished(int requestId, bool error) return; } + bd_.upgradeCallbacks++; QString oresponse(http->readAll()); QDomDocument document; @@ -287,8 +289,8 @@ void UpgradeCheck::httpRequestFinished(int requestId, bool error) information.setStandardButtons(QMessageBox::Yes | QMessageBox::No); information.setDefaultButton(QMessageBox::Yes); - information.setText(response); + information.setInformativeText(tr("Do you wish to download an upgrade?")); information.setDetailedText(upgradeText); @@ -296,6 +298,8 @@ void UpgradeCheck::httpRequestFinished(int requestId, bool error) case QMessageBox::Yes: // downloadUrl.addQueryItem("os", getOsName()); QDesktopServices::openUrl(downloadUrl); + bd_.upgradeAccept++; + break; default: ; bd_.upgradeDeclines++; } diff --git a/gui/version_mismatch.cpp b/gui/version_mismatch.cpp new file mode 100644 index 000000000..62560299d --- /dev/null +++ b/gui/version_mismatch.cpp @@ -0,0 +1,34 @@ +// -*- C++ -*- +//------------------------------------------------------------------------ +// +// Copyright (C) 2010 Robert Lipe setText(ver1); + ui.ClVersion->adjustSize(); + + ui.GuiVersion->setText(ver2); + ui.GuiVersion->adjustSize(); +} diff --git a/gui/version_mismatch.h b/gui/version_mismatch.h new file mode 100644 index 000000000..2c88706a0 --- /dev/null +++ b/gui/version_mismatch.h @@ -0,0 +1,39 @@ +// -*- C++ -*- +//------------------------------------------------------------------------ +// +// Copyright (C) 2010 Robert Lipe +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 +// USA +// + +#ifndef VERSION_MISMATCH_H +#define VERSION_MISMATCH_H + +#include + +#include "ui_version_mismatch.h" + +class VersionMismatch: public QDialog { + public: + VersionMismatch(QWidget *parent, const QString &ver1, + const QString &ver2); + bool neverAgain() { return ui.neverAgain->isChecked(); } + + private: + Ui_VersionMismatch ui; +}; + +#endif diff --git a/gui/version_mismatch.ui b/gui/version_mismatch.ui new file mode 100644 index 000000000..880aefdf7 --- /dev/null +++ b/gui/version_mismatch.ui @@ -0,0 +1,168 @@ + + + VersionMismatch + + + + 0 + 0 + 346 + 144 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 400 + 300 + + + + GPSBabel Version Mismatch + + + + + + <b>A version mismatch has been detected.</b> + + + + + + + + + GPSBabel command line version: + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + GPSBabel GUI version: + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Never show this message again. + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ignore + + + + + + + + + + + buttonBox + accepted() + VersionMismatch + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + VersionMismatch + reject() + + + 316 + 260 + + + 286 + 274 + + + + + -- 2.30.2